package com.moonbird.springboot.service;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.moonbird.springboot.Utils.imageCreate.ImageGenerator;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Base64;

@Service
public class ImageService {

    public String generateImage(String description) throws FileNotFoundException {

        // 使用 Gson 解析 JSON 字符串
        Gson gson = new Gson();
        JsonObject jsonObject = gson.fromJson(description, JsonObject.class);
        // 获取描述信息
        String desc = jsonObject.get("description").getAsString();
        //System.out.println(desc);

        String imagePath = null;
        try {
            // 生成图片并获取图片路径
            imagePath = ImageGenerator.generateImage(desc);
            System.out.println("Image saved to: " + imagePath);
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (imagePath == null) {
            System.out.println("生成图片失败");
            return null;
        }

        // 将图片文件转换为 base64 编码的字符串
        String base64Image = convertImageToBase64(imagePath);

        // 删除生成的图片文件
        deleteImage(imagePath);

        // 返回 base64 编码的图片字符串
        return base64Image;
    }

    // 将图片文件转换为 base64 编码的字符串
    private String convertImageToBase64(String imagePath) throws FileNotFoundException {
        File file = new File(imagePath);
        try (FileInputStream fis = new FileInputStream(file)) {
            // 使用 Apache Commons IOUtils 将文件内容读取为 byte 数组
            byte[] imageBytes = IOUtils.toByteArray(fis);
            // 使用 Base64 编码器将 byte 数组编码为 base64 字符串
            return Base64.getEncoder().encodeToString(imageBytes);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    // 删除图片文件
    private void deleteImage(String imagePath) {
        File file = new File(imagePath);
        if (file.exists()) {
            if (file.delete()) {
                System.out.println("Deleted the file: " + file.getName());
            } else {
                System.out.println("Failed to delete the file.");
            }
        }
    }
}
